// 基于 axios 封装一个我们自己的 'ajax'

// 1. 引入 axios
import axios from "axios";
import store from '../store'
import router from '../router'

// 2. 基于 axios 创建一个我们自己的 'ajax'
const instance = axios.create({
    // 请求的基准地址
    baseURL: "http://121.89.205.189:3000/admin",
    // 请求超时时间
    timeout: 60000,
});

// 添加请求拦截器
instance.interceptors.request.use(
    function (config) {
        // 当前函数的第一个形参 config 是我们请求的 请求报文, 如果在 config 内添加了一些数据, 会被传递给后端

        // console.log('发送请求前, 会执行: ', config)
        if (config.url !== "/admin/login") {
            config.headers.token = store.state.userInfo.token

            // console.log(JSON.parse(window.localStorage.getItem("vuex")).userInfo.token);
            // console.log(store.state.userInfo.token)
        }

        return config;
    },
    function (error) {
        // 对请求错误做些什么
        return Promise.reject(error);
    }
);

// 添加响应拦截器
instance.interceptors.response.use(
    function (response) {
        // 2xx 范围内的状态码都会触发该函数。
        // 对响应数据做点什么


        // console.log('响应拦截器: ', response)
        if (response.data.code === '10119') {

            // console.log('此时 token 过期, 应该跳转到 登录页')
            router.push('/login')
        }

        // return response;
        // return [1, 2, 3, 4, 5];
        // return { msg: '响应拦截器' };
        return response.data;
    },
    function (error) {
        // 超出 2xx 范围的状态码都会触发该函数。
        // 对响应错误做点什么
        return Promise.reject(error);
    }
);

// 3. 基于我们自己的 'ajax', 封装一个请求函数       当前的函数是给 api 目录下某些文件中的函数使用的
export default function ajax(options) {
    const { url, method = "get", data = {} } = options;

    const reg = /^get$/i;

    if (reg.test(method)) {
        return instance.get(url, {
            params: data,
        });
    } else {
        return instance.post(url, data);
    }
}
